package com.warren.aop;

/**
 * @author warren
 * @create 2021-08-24 15:10
 * @Description 目标对象封装
 */
public class TargetSource {
    private final Object target;

    public TargetSource(Object target) {
        this.target = target;
    }

    /**
     *  返回此 {@link TargetSource} 返回的目标类型。
     *  <p>可以返回 <code>null<code>，
     *  尽管 <code>TargetSource<code> 的某些用法可能只适用于预定的目标类。
     * @return the type of targets returned by this {@link TargetSource}
     */
    public Class<?>[] getTargetClass(){
        return this.target.getClass().getInterfaces();
    }

    /**
     * R返回一个目标实例。在 AOP 框架调用 AOP 方法调用的“目标”之前立即调用。
     * @return 包含连接点的目标对象
     * @throws Exception if the target object can't be resolved
     */
    public Object getTarget(){
        return this.target;
    }
}
